package com.jason.library.immersion.utils

import android.annotation.SuppressLint
import android.text.TextUtils

/**
 * Description:OSUtils
 *
 * @author chenbaoyang
 * @create 2021/1/12 09:56
 */
internal object OSUtils {

    /**
     * 获取 MIUI（小米）系统的版本的key
     */
    const val KEY_MIUI_VERSION_NAME = "ro.miui.ui.version.name"

    /**
     * 获取 EMUI（华为）系统的版本的key
     */
    const val KEY_EMUI_VERSION_NAME = "ro.build.version.emui"

    /**
     * 获取 flymeOS（魅族）系统的版本key
     */
    const val KEY_DISPLAY = "ro.build.display.id"

    /**
     * EMUI3.0（华为）系统的属性字段值
     */
    const val PROPERTY_EMUI_3_0 = "EmotionUI_3.0"

    /**
     * EMUI3（华为）系统的属性字段值
     */
    const val PROPERTY_EMUI_3 = "EmotionUI 3"

    /**
     * EMUI3.1（华为）系统的属性字段值
     */
    const val PROPERTY_EMUI_3_1 = "EmotionUI_3.1"

    /**
     * 判断是否是EMUI系统（华为）
     *
     * @return the boolean
     */
    fun isEMUI() : Boolean{
        val property = getSystemProperty(KEY_MIUI_VERSION_NAME, "")
        return !TextUtils.isEmpty(property)
    }

    /**
     * 获取EMUI（华为）系统的版本号
     *
     * @return the emui version
     */
    fun getEMUIVersion() : String {
        if(isEMUI()) {
            return getSystemProperty(KEY_MIUI_VERSION_NAME, "")
        }
        return ""
    }

    /**
     * 判断是否为emui3.0版本
     *
     * @return the boolean
     */
    fun isEMUI3_0() :Boolean {
        val property = getEMUIVersion()
        return property.contains(PROPERTY_EMUI_3_0)
    }

    /**
     * 判断是否为emui3.1版本
     *
     * @return the boolean
     */
    fun isEMUI3_1() : Boolean {
        val property = getEMUIVersion()
        return "EmotionUI 3" == property || property.contains("EmotionUI_3.1")
    }

    /**
     * 判断是否为emui3.x版本
     *
     * @return the boolean
     */
    fun isEMUI3_x(): Boolean {
        return isEMUI3_0() or isEMUI3_1()
    }



    /**
     * 获取当前系统的属性信息
     *
     * @param key 对应系统的版本key参数
     * @param defaultValue 默认值
     */
    private fun getSystemProperty(key: String, defaultValue: String): String {
        try {
            @SuppressLint("PrivateApi") val clz =
                Class.forName("android.os.SystemProperties")
            val method =
                clz.getMethod("get", String::class.java, String::class.java)
            return (method.invoke(clz, key, defaultValue) as String)!!
        } catch (e: Exception) {
            e.printStackTrace()
        }
        return defaultValue
    }

}